import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_pink_app/business/token.dart';
import '../style/color.dart';
import 'home_page.dart';
import 'ranking_page.dart';
import 'favourite_page.dart';
import 'personal_page.dart';

// 入口页面部分
class BiliMainPage extends StatefulWidget {
  @override
  _BiliMainPageState createState() => _BiliMainPageState();
}

class _BiliMainPageState extends State<BiliMainPage> {
  static int initialIndex = 0; // 初始指向页面索引
  final List<Widget> _pages = [
    BiliHomePage(),
    BiliRankingPage(),
    BiliFavouritePage(),
    BiliPersonalPage()
  ]; // 展示页面
  final List<_BottomLabel> _bottomModel = [
    _BottomLabel('首页', Icons.home, 0),
    _BottomLabel('排行', Icons.local_fire_department, 1),
    _BottomLabel('收藏', Icons.favorite, 2),
    _BottomLabel('我的', Icons.person, 3)
  ]; // 底部导航栏数据模型
  int _currIndex = 0; // 当前指向页面索引
  final PageController _pageController =
      PageController(initialPage: initialIndex); // 页面控制器

  @override
  void initState() {
    super.initState();
    Timer(Duration(minutes: 10), clearToken); // 登陆首页一段时间后自动清除token
  }

  // 构建底部导航栏
  BottomNavigationBar _buildBottomBar(List<_BottomLabel> list) {
    assert(list.length == _pages.length, '底部导航内容长度应与页面区块相等，请检查传入数据项长度。');
    return BottomNavigationBar(
      currentIndex: _currIndex,
      onTap: (int index) {
        // 页面控制器跳转并更新索引
        _pageController.jumpToPage(index);
        setState(() => _currIndex = index);
      },
      selectedFontSize: 14,
      unselectedFontSize: 14,
      selectedItemColor: mainThemeColor,
      type: BottomNavigationBarType.fixed, // 固定特效
      items: list
          .map((model) => _buildButtomItem(model, model.id == _currIndex))
          .toList(),
    );
  }

  // 构建底部导航单标签
  BottomNavigationBarItem _buildButtomItem(
      _BottomLabel label, bool isSelected) {
    return BottomNavigationBarItem(
        icon: Icon(label.icon,
            color: isSelected ? mainThemeColor : grayTextColor),
        label: label.text);
  }

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      top: true, // 顶部异形屏适配
      bottom: true, // 底部异形屏适配
      child: Scaffold(
        body: NotificationListener<ClickStatusbarAvatarNotification>(
          onNotification: (_) {
            _pageController.jumpToPage(3); // 接收到状态栏点击头像事件，页面跳转到个人中心
            setState(() {
              _currIndex = 3;
            });
            return true; // 拦截事件
          },
          child: PageView(
            controller: _pageController,
            children: _pages,
            physics: NeverScrollableScrollPhysics(), // 禁止页面左右滑动
          ),
        ),
        bottomNavigationBar: SizedBox(
            height: 70, child: _buildBottomBar(_bottomModel)), // 这里采取了硬编码高度的模式
      ),
    );
  }
}

// 底部标签私有类
class _BottomLabel {
  _BottomLabel(this.text, this.icon, this.id);
  String text; // 标签文字
  IconData icon; // 标签图标
  final int id; // 标签id
}
